package fr.upstlse.glre.client.login.action;

import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.extjs.gxt.ui.client.widget.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;

import fr.upstlse.glre.client.espacededie.EspaceFactory;
import fr.upstlse.glre.client.login.Login;
import fr.upstlse.glre.client.utilitaires.ControlerUtil;
import fr.upstlse.glre.client.vo.user.UserVOGWT;

public class LoginAction extends SelectionListener<ButtonEvent> {

	private Login loginPanel;
	private Window window;

	public LoginAction(Login pLoginPanel) {
		loginPanel = pLoginPanel;

		window = loginPanel.getLoginWindow();
	}

	/**
	 * Recherche l'utilisateur correspondant aux données entrées (login, mot de
	 * passe). Si l'utilisateur n'a pas le rôle ADMIN, recherche les
	 * informations supplémentaires et charge l'espace correspondant.
	 */
	public void componentSelected(ButtonEvent ce) {
		window.hide();
		final String lLogin = (String) loginPanel.getLoginFields().getLogin()
				.getValue();
		final String lMotDePasse = (String) loginPanel.getLoginFields()
				.getMotDePasse().getValue();
		// final MessageBox lInfoMessageBox = MessageBox.alert("Chargement",
		// "Identification", null);
		AsyncCallback<UserVOGWT> lCallback = new AsyncCallback<UserVOGWT>() {

			public void onFailure(Throwable pCaught) {
				// lInfoMessageBox.hide();
				MessageBox.alert("Erreur", "Erreur getUser "
						+ pCaught.getMessage(), null);
			}

			public void onSuccess(UserVOGWT pResult) {
				// lInfoMessageBox.hide();
				UserVOGWT lUser = pResult;
				if (lUser.getId() == 0) {
					MessageBox.alert("Identification",
							"L'utilisateur n'existe pas", null);
				} else {
					EspaceFactory
							.getEspaceDedie(lUser.getId(), lUser.getRole());

				}
			}
		};

		ControlerUtil.getUserControlerServiceAsyncInstance().login(lLogin, lMotDePasse,
				lCallback);
	}
}
